// CSE571 - abstract-interpreter.h          
// Authors: Jonathan Wald, Guangle Fan
// Defines the interpreter used for reading commands in from the terminal.
// The interpreter is an active object that runs concurrently with the
// rest of the application.

#ifndef ABSTRACT_INTERPRETER_H
#define ABSTRACT_INTERPRETER_H

#include <set>
#include <string>
#include <iostream>

#include "ace/Svc_Handler.h"

class AsyncIOSvcHandler;

using namespace std;

class AbstractInterpreter : public ACE_Task<ACE_MT_SYNCH> {

 public:
  set<string> open_files;

  virtual int svc (void);
  virtual void process_input(istream& is);

  virtual void process(string filename);
  virtual void define(string filename) = 0;
  virtual void current(string label = "", string value = "") = 0;
  virtual void play(string game_type) = 0;
  virtual void dontplay(string game_type) = 0;
  virtual void suspend(string game) = 0;
  virtual void resume(string game) = 0;

};

#endif
